package com.fau.cm.service;

import java.util.List;
import java.util.Map;

import org.apache.poi.ss.usermodel.Workbook;

import com.fau.cm.entity.MedicalAdmin;
import com.fau.cm.entity.MedicalKeyValue;
import com.fau.cm.entity.MedicalLogistics;
import com.fau.cm.entity.MedicalMediaInfo;
import com.fau.cm.entity.MedicalOrders;
import com.fau.cm.entity.MedicalOrdersProduct;
import com.fau.cm.entity.MedicalOrdersStorage;
import com.fau.cm.util.Page;
/**
 * @desc 话务中心订单管理接口
 * @author kangyj
 * @datetime 2014年12月1日,上午11:31:57
 */
public interface IOrdersManagerService {

	/**
	 * @desc 保存订单
	 * @param orders
	 * @param admin
	 * @return
	 * @author kangyj
	 * @datetime 2014年11月23日,下午11:39:28
	 */
	public String saveOrders(MedicalOrders orders, MedicalAdmin admin);
	
	/**
	 * @desc 修改订单基本信息
	 * @param orders
	 * @param admin
	 * @author kangyj
	 * @datetime 2014年11月24日,上午9:26:47
	 */
	public void editOrders(MedicalOrders orders, MedicalAdmin admin);
	
	/**
	 * @desc 删除订单
	 * @param orders 订单
	 * @return
	 * @author kangyj
	 * @datetime 2014年11月24日,上午12:05:38
	 */
	public void delOrders(MedicalOrders orders);
	
	/**
	 * @desc 根据用户id 查订单
	 * @param orders 订单对象
	 * @return
	 * @author kangyj
	 * @datetime 2014年11月21日,下午1:07:57
	 */
	public List<MedicalOrdersStorage> findOrdersByCid(MedicalOrders orders);
	
	/**
	 * @desc 查询媒体集合
	 * @param admin
	 * @return
	 * @author kangyj
	 * @datetime 2014年11月20日,下午8:29:02
	 */
	public List<MedicalMediaInfo> findMediaList(MedicalAdmin admin);
	
	/**
	 * @desc 查询物流公司集合
	 * @param admin
	 * @return
	 * @author kangyj
	 * @datetime 2014年11月20日,下午8:35:40
	 */
	public List<MedicalLogistics> findLogisticsList(MedicalAdmin admin);
	
	/**
	 * @desc 查询订单产品
	 * @param ordersProduct 订单产品对象，用于传递查询条件
	 * @param map 分页参数
	 * @return
	 * @author kangyj
	 * @datetime 2014年11月23日,下午5:14:59
	 */
	public Page findMedAndPreByPage(MedicalOrdersProduct ordersProduct, Map<String, Object> map);
	
	/**
	 * @desc 保存订单产品
	 * @param ordersProduct 订单产品实体类
	 * @author kangyj
	 * @datetime 2014年11月23日,下午10:47:15
	 */
	public void saveOrdersProduct(MedicalOrdersProduct ordersProduct);
	
	/**
	 * @desc 根据订单id查询订单产品
	 * @param ordersId
	 * @return
	 * @author kangyj
	 * @datetime 2014年11月23日,下午11:21:34
	 */
	public List<MedicalOrdersProduct> findOrdersProductList(String ordersId);
	
	/**
	 * @desc 删除订单产品
	 * @param ordersProduct 订单产品对象
	 * @author kangyj
	 * @datetime 2014年11月24日,上午12:02:23
	 */
	public void delOrdersProduct(MedicalOrdersProduct ordersProduct);
	
	/**
	 * @desc 下单验证药品是否已存在
	 * @param ordersProduct
	 * @return
	 * @author kangyj
	 * @datetime 2015年3月11日,上午12:58:17
	 */
	public boolean validProExist(MedicalOrdersProduct ordersProduct);
	
	/**
	 * @desc 订单生效修改订单状态
	 * @param orders
	 * @author kangyj
	 * @datetime 2014年11月25日,上午12:20:19
	 */
	public void editOrdersStatus(MedicalOrders orders);

	/**
	 * @desc 查询所有订单
	 * @param orders
	 * @param map
	 * @return
	 * @author kangyj
	 * @datetime 2014年12月18日,上午11:40:47
	 */
	public Page findAllStorageByPage(MedicalOrders orders, Map<String, Object> map);
	
	/**
	 * @desc 分页查询中心订单
	 * @param ordersStorage
	 * @param map
	 * @return
	 * @author kangyj
	 * @datetime 2014年12月17日,下午6:10:55
	 */
	public Page findCenterStorageByPage(MedicalOrders orders, Map<String, Object> map, MedicalAdmin admin);
	
	/**
	 * @desc 分页查询组订单
	 * @param ordersStorage
	 * @param map
	 * @return
	 * @author kangyj
	 * @datetime 2014年12月17日,下午6:12:21
	 */
	public Page findGroupStorageByPage(MedicalOrders orders, Map<String, Object> map, MedicalAdmin admin);
	
	/**
	 * @desc 分页查询我的订单
	 * @param ordersStorage
	 * @param map
	 * @return
	 * @author kangyj
	 * @datetime 2014年12月17日,下午6:12:50
	 */
	public Page findMyStorageByPage(MedicalOrders orders, Map<String, Object> map);
	
	/**
	 * @desc 订单审核不通过，再次修改保存
	 * @param orders
	 * @author kangyj
	 * @datetime 2014年12月28日,下午3:11:29
	 */
	public void editOrdersStorage(MedicalOrders orders);
	
	/**
	 * @desc 订单再次提交审核
	 * @param orders
	 * @author kangyj
	 * @datetime 2014年12月28日,下午3:11:59
	 */
	public void againSubmit(MedicalOrders orders);
	
	/**
	 * @desc 导出当前
	 * @return Workbook
	 * @throws Exception 
	 * @author liy
	 * @datetime 2015年1月7日,上午11:21:41
	 */
	public Workbook exportCurrentAll(String ids) throws Exception;
	
	/**
	 * @desc 导出全部-所有
	 * @return Workbook
	 * @throws Exception 
	 * @author liy
	 * @datetime 2015年1月7日,上午11:47:25
	 */
	public Workbook allExportCurrentAll(MedicalOrders orders) throws Exception;
	
	/**
	 * @desc 导出全部-中心
	 * @return Workbook
	 * @throws Exception 
	 * @author liy
	 * @datetime 2015年1月7日,下午2:47:45
	 */
	public Workbook allExportCenter(MedicalOrders orders, MedicalAdmin admin) throws Exception;
	
	/**
	 * @desc 导出全部-本组
	 * @return Workbook
	 * @throws Exception 
	 * @author liy
	 * @datetime 2015年1月7日,下午3:02:09
	 */
	public Workbook allExportGroup(MedicalOrders orders, MedicalAdmin admin) throws Exception;
	
	/**
	 * @desc 导出全部-我的
	 * @return Workbook
	 * @throws Exception 
	 * @author liy
	 * @datetime 2015年1月7日,下午3:15:54
	 */
	public Workbook allExportMy(MedicalOrders orders) throws Exception;
	
	/**
	 * @desc 根据订单id查找订单
	 * @param ordersId
	 * @return MedicalOrdersStorage
	 * @author dangjh
	 * 2015年2月6日 下午7:46:49
	 */
	public MedicalOrdersStorage findByOId(String ordersId);
	
	/**
	 * @desc 查询客户原来下单数量（不包含正在输入订单）
	 * @param customerId 客户id
	 * @param ordersId 订单id(不包含当前打开的订单)
	 * @return
	 * @author kangyj
	 * @datetime 2015年2月14日,下午5:14:48
	 */
	public Long getOrdersCount(String customerId, String ordersId);
	
	/**
	 * @desc 查询客户原来下的订单（不包含正在输入订单）
	 * @param customerId 客户id
	 * @param ordersId 订单id
	 * @return
	 * @author kangyj
	 * @datetime 2015年2月14日,下午5:18:08
	 */
	public List<MedicalOrdersStorage> findHistoryList(String customerId, String ordersId);
	
	/**
	 * @desc 计算折扣价
	 * @param orders
	 * @author kangyj
	 * @datetime 2015年3月17日,下午3:33:19
	 */
	public void calcDiscount(MedicalOrders orders);
	
	
	public List<MedicalOrders> findInputOrders(String customerId);

	/**
	 * @desc 查询系统中心
	 * @param typeName
	 * @return
	 * @author zhaoey
	 * @datetime 2015年4月11日,下午1:56:07
	 */
	public List<MedicalKeyValue> findSystemList(String typeName);
	
	/**
	 * @desc 查询订单状态
	 * @param systemType
	 * @return
	 * @author zhaoey
	 * @datetime 2015年4月11日,下午1:56:07
	 */
	public List<MedicalKeyValue> findOrderStatusList(String systemType);
}
